'use strict';

const Controller = require('egg').Controller;
const fs = require('fs')
const path = require('path')
const pump = require('mz-modules/pump')

class UploadController extends Controller {
    // 上传图片
    async index() {
        try {
            const stream = await this.ctx.getFileStream();
            // 给图片命名 时间戳 + 文件后缀小写
            // toLowerCase() 方法用于把字符串转换为小写
            const filename = new Date().getTime() + path.extname(stream.filename).toLowerCase();
            // 指定路径 
            // path.join()方法是将多个参数字符串合并成一个路径字符串
            const target = path.join(this.config.baseDir, 'app/public/upload', filename);
            // createWriteStream() 写流
            // 创建一个可以写入的流，写入到文件 target 中
            const writeStream = fs.createWriteStream(target);
            //         1， 读    2， 写       上传失败 自动销毁
            await pump(stream, writeStream);
            this.ctx.body = {
                code: 200,
                data: {
                    name: filename,
                    file: `http://127.0.0.1:7001/public/upload/${filename}`  //临时服务器地址
                }
            }
        } catch (err) { console.log(err) }
    }
    async indexbook() {
        try {
            // 获取 文件
            const stream = await this.ctx.getFileStream();
            // 图片命名 时间戳 + 小写后缀名
            const filename = new Date().getTime() + path.extname(stream.filename).toLowerCase();
            // 指定路径
            const target = path.join(this.config.baseDir, 'app/public/uploadbook', filename);
            // 写流 没有则创建 
            const writeStream = fs.createWriteStream(target);
            await pump(stream, writeStream);
            this.ctx.body = {
                code: 200,
                data: {
                    name: filename,
                    file: `http://127.0.0.1:7001/public/uploadbook/${filename}`  //临时服务器地址
                }
            }
        } catch (err) {
            console.log(err)
        }
    }



    // async index() {
    //     // 解析表单数据
    //     let part = this.ctx.multipart({autoFields: true});
    //     // 图片访问地址集合
    //     let stream, imgList = [];
    //     // 获取文件信息
    //     // stream = await part()
    //     // 表单数据除了附件以外的其他信息
    //     // var params = part.field
    //     while((stream = await part())  != null){
    //         if(!stream.filename) return;
    //         // 文件名为: 时间戳 + 随机字符串 + .文件后擢
    //         // extname 可以获取文件的扩展名
    //         let filename = (new Date()).getTime() + Math.random().toString(36).substr(2) + path.extname(stream.filename)
    //         // 上传图片的目录
    //         let target = "app/public/upload" + filename;
    //         imgList.push("public/upload/" + filename);
    //         // createWriteStream 穿进一个写文件流的方法，可以将文件写入到本地文件中
    //         // createReadStream 读取文件内容的方法
    //         await pump(stream, writeStream)
    //     }
    //     console.log(imgList)
    //     this.ctx.body = {
    //         url: "http://127.0.0.1:7001" + imgList,
    //         fields: part.field
    //     }
    //     console.log("======================================")
    //     console.log(this.ctx.body)
    //     console.log("======================================")
    // }

}

module.exports = UploadController;
